package com.training.api.service;

import com.training.api.repository.LearningTrackDataRepository;
import com.training.bean.LearningTrackData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class LearningTrackDataService {
    
    @Autowired
    private LearningTrackDataRepository learningTrackDataRepository;
    
    /**
     * 批量保存学习记录
     * @param dataList 学习记录列表
     */
    public void saveLearningTrackDataList(List<LearningTrackData> dataList) {
        for (LearningTrackData data : dataList) {
            // 查找现有的学习记录
            List<LearningTrackData> existingDataList = learningTrackDataRepository.findByUidAndCcid(data.getUid(), data.getCcid());
            
            if (!existingDataList.isEmpty()) {
                // 如果存在现有记录，则更新它
                LearningTrackData existingData = existingDataList.get(0); // 取第一条记录
                existingData.setCsid(data.getCsid());
                existingData.setCid(data.getCid());
                existingData.setStudy_duration(data.getStudy_duration());
                existingData.setLast_date(new Date()); // 更新最后时间
                
                // 保存更新后的数据
                learningTrackDataRepository.save(existingData);
            } else {
                // 如果不存在现有记录，则创建新记录
                // 设置创建时间
                if (data.getCread_date() == null) {
                    data.setCread_date(new Date());
                }
                // 更新最后时间
                data.setLast_date(new Date());
                
                // 保存数据
                learningTrackDataRepository.save(data);
            }
        }
    }
    
    /**
     * 根据用户ID和课程内容ID查找学习记录
     * @param uid 用户ID
     * @param ccid 课程内容ID
     * @return 学习记录列表
     */
    public List<LearningTrackData> findByUidAndCcid(int uid, int ccid) {
        return learningTrackDataRepository.findByUidAndCcid(uid, ccid);
    }
    
    /**
     * 保存单条学习记录（更新模式）
     * 如果存在相同用户和课程内容的记录，则更新；否则新增
     * @param data 学习记录
     * @return 保存后的学习记录
     */
    public LearningTrackData saveOrUpdate(LearningTrackData data) {
        // 查找是否存在相同的记录
        List<LearningTrackData> existingDataList = learningTrackDataRepository.findByUidAndCcid(data.getUid(), data.getCcid());
        
        LearningTrackData existingData = null;
        if (!existingDataList.isEmpty()) {
            // 取第一条记录作为现有记录
            existingData = existingDataList.get(0);
            // 更新现有记录的字段
            existingData.setCsid(data.getCsid());
            existingData.setCid(data.getCid());
            existingData.setStudy_duration(data.getStudy_duration());
            existingData.setLast_date(new Date()); // 更新最后时间
            // cread_date 保持不变
            
            return learningTrackDataRepository.save(existingData);
        } else {
            // 新增记录
            if (data.getCread_date() == null) {
                data.setCread_date(new Date());
            }
            data.setLast_date(new Date());
            return learningTrackDataRepository.save(data);
        }
    }
}